home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 12 - 1996 / 12.10 Oct 96 / ChallyDebugCTB / Code / TestDebugTerm.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-04-12  |  4.6 KB  |  196 lines  |  [TEXT/MMCC]

  1. // TestDebugTerm.c
  2.  
  3. #include "TestDebugTerm.h"
  4. #include "DebugTerm.h"
  5.  
  6. Handle        gMBar;
  7. MenuHandle    gAppleMenuH, gFileMenuH, gEditMenuH, gTestMenuH;
  8. Boolean        gAsync, gPrompt;
  9.  
  10. pascal void DoQuit(void)
  11. {
  12.     CloseDebugTerm();    // accidentally leaving a connection open would be
  13.     ExitToShell();        // a bad thing, and redundantly calling won't hurt
  14. }
  15.  
  16. void InitSys(void)
  17. {
  18.     InitGraf(&qd.thePort);
  19.     InitWindows();
  20.     InitFonts();
  21.     InitMenus();
  22.     InitDialogs(DoQuit);
  23.     InitCursor();
  24.     FlushEvents(everyEvent, nil);
  25. }
  26.  
  27. void SetupMenus(void)
  28. {
  29.     gMBar = GetNewMBar(rMBarID);
  30.     SetMenuBar(gMBar);
  31.     gAppleMenuH = GetMHandle(rAppleMenuID);
  32.     gFileMenuH = GetMHandle(rFileMenuID);
  33.     gEditMenuH = GetMHandle(rEditMenuID);
  34.     gTestMenuH = GetMHandle(rTestMenuID);
  35.     AddResMenu(gAppleMenuH, 'DRVR');
  36.     DrawMenuBar();
  37. }
  38.  
  39. void DoAboutBox(void)
  40. {
  41.     Alert(rAboutAlertID, nil);
  42. }
  43.  
  44.  
  45. void InitApp(void)
  46. {
  47.     SetupMenus();
  48.     gAsync = gPrompt = true;
  49.     CheckItem(gTestMenuH, rAsyncMItem, true);
  50.     CheckItem(gTestMenuH, rPromptMItem, true);
  51. }
  52.  
  53. void DoMenu(long menuResult)
  54. {
  55.     short         i, menuID, itemNumber;
  56.     Str255         daName;
  57.     GrafPtr     oldPort;
  58.     
  59.     menuID = HiWord(menuResult);
  60.     itemNumber = LoWord(menuResult);
  61.     
  62.     switch(menuID) {
  63.         case rAppleMenuID:
  64.             if (itemNumber == rAboutMItem)
  65.                 DoAboutBox();
  66.             else {
  67.                 GetItem(gAppleMenuH, itemNumber, daName);
  68.                 GetPort(&oldPort);
  69.                 OpenDeskAcc(daName);
  70.                 SetPort(oldPort);
  71.             }
  72.             break;
  73.         case rFileMenuID:
  74.             switch(itemNumber) {
  75.                 case rQuitMItem:
  76.                     DoQuit();
  77.                     break;
  78.             }
  79.             break;
  80.         case rEditMenuID:
  81.             SystemEdit(itemNumber - 1);
  82.             break;
  83.         case rTestMenuID:
  84.             switch(itemNumber) {
  85.                 case rOpenMItem:
  86.                     if (OpenDebugTerm(gAsync, kDoInitCTB, gPrompt)) 
  87.                         SysBeep(5);
  88.                     else {
  89.                         DisableItem(gTestMenuH, rOpenMItem);
  90.                         DisableItem(gTestMenuH, rAsyncMItem);
  91.                         DisableItem(gTestMenuH, rPromptMItem);
  92.                         EnableItem(gTestMenuH, rCloseMItem);
  93.                         EnableItem(gTestMenuH, rSimpleMItem);
  94.                         EnableItem(gTestMenuH, rSlowerMItem);
  95.                         EnableItem(gTestMenuH, rFasterMItem);
  96.                         EnableItem(gTestMenuH, rStressMItem);
  97.                         EnableItem(gTestMenuH, rRectMItem);
  98.                         EnableItem(gTestMenuH, rAbsurdItem);
  99.                     };
  100.                     break;
  101.                 case rCloseMItem:
  102.                     if (CloseDebugTerm()) 
  103.                         SysBeep(5);
  104.                     else {
  105.                         EnableItem(gTestMenuH, rOpenMItem);
  106.                         EnableItem(gTestMenuH, rAsyncMItem);
  107.                         EnableItem(gTestMenuH, rPromptMItem);
  108.                         DisableItem(gTestMenuH, rCloseMItem);
  109.                         DisableItem(gTestMenuH, rSimpleMItem);
  110.                         DisableItem(gTestMenuH, rSlowerMItem);
  111.                         DisableItem(gTestMenuH, rFasterMItem);
  112.                         DisableItem(gTestMenuH, rStressMItem);
  113.                         DisableItem(gTestMenuH, rRectMItem);
  114.                         DisableItem(gTestMenuH, rAbsurdItem);
  115.                     };
  116.                     break;
  117.                 case rAsyncMItem:
  118.                     CheckItem(gTestMenuH, rAsyncMItem, gAsync = !gAsync);
  119.                     break;
  120.                 case rPromptMItem:
  121.                     CheckItem(gTestMenuH, rPromptMItem, gPrompt = !gPrompt);
  122.                     break;
  123.                 case rSimpleMItem:
  124.                     DebugTerm("\pHello, World!\n\r");
  125.                     break;
  126.                 case rSlowerMItem:
  127.                     debugf("Elapsed time: %s minutes and %i seconds.\n\r", 5, 3);
  128.                     break;
  129.                 case rFasterMItem:
  130.                     debugf("%p%l%c%s%p%i%c", "\pElapsed time: ", 10l,
  131.                         " hours, ", 5, "\p minutes and ", 3, " seconds.\n\r");
  132.                     break;
  133.                 case rRectMItem:
  134.                     // alternate possibility to use %r specifier
  135.                     //debugf("Screenbits.bounds: %r\n\r", qd.screenBits.bounds);
  136.                     debugf("%p {%s, %s, %s, %s}\n\r", "\pScreenbits.bounds:",
  137.                         qd.screenBits.bounds.top, qd.screenBits.bounds.left,
  138.                         qd.screenBits.bounds.bottom, qd.screenBits.bounds.right);
  139.                     break;
  140.                 case rAbsurdItem:
  141.                     debugf("%% %p %c %s times.\n\r", "\pRocko", 
  142.                         "had an unfortunate accident. He fell on his stiletto", 47);
  143.                     break;
  144.                 case rStressMItem:
  145.                     for(i = 1; i <= 500; i++)
  146.                         debugf("%p%i%c", "\pExecuting 500 times: i = ", i, "\n\r");
  147.                     break;
  148.             }
  149.             break;
  150.         default:
  151.             break;
  152.     }
  153.     HiliteMenu(0);
  154. }
  155.  
  156. void main(void)
  157. {
  158.     char            c;
  159.     EventRecord        theEvent;
  160.     WindowPtr        whichWindow;
  161.     short            windowCode;
  162.     long            result;
  163.  
  164.     InitSys();
  165.     InitApp();
  166.     
  167.     while (true) {
  168.         SystemTask();
  169.         if (GetNextEvent(everyEvent, &theEvent)) {
  170.             switch (theEvent.what) {
  171.                 case updateEvt:
  172.                     break;
  173.                 case keyDown:
  174.                 case autoKey:
  175.                     c = theEvent.message & kKeyMask;
  176.                     if (theEvent.modifiers & cmdKey)
  177.                         DoMenu(MenuKey(c));
  178.                     break;
  179.                 case mouseDown:
  180.                     windowCode = FindWindow(theEvent.where, &whichWindow);
  181.                     switch (windowCode) {
  182.                         case inMenuBar:
  183.                             result = MenuSelect(theEvent.where);
  184.                             DoMenu(result);
  185.                             break;
  186.                         case inSysWindow:
  187.                             SystemClick(&theEvent, whichWindow);
  188.                             break;
  189.                         default:
  190.                             break;
  191.                     }
  192.                     break;
  193.             }
  194.         }
  195.     }
  196. }